<?php
if(!defined('BASEPATH'))
{
	exit('No direct script access allowed');
}

class SAuthHook
{
	public function autoriza()
	{
		$CI =& get_instance();

		$CI->load->library ("session");
		$CI->load->helper  ("sauth/sauth");
		$CI->load->helper  ("url");

		$noauth  = array();
		$publico = false;
		
		if (isset ($CI->sauth_noauth) && is_array($CI->sauth_noauth))
		{
			$noauth = $CI->sauth_noauth;
		}
		
		if (isset ($CI->publico) && $CI->publico)
		{
			$publico = true;
		}
		
        $clase     = strtolower($CI->router->class);
        $metodo    = strtolower($CI->router->method);
        $accion    = "/".$clase."/".$metodo."/";
		$usuario   = $CI->session->userdata (SAConstantes::USUARIO_SESION);
		$admin     = $CI->session->userdata (SAConstantes::ADMIN_SESION);
		$accesoBD  = new AccesoBD($GLOBALS["ACCESOBD_DATOS"]);
		$instancia = new SAModeloAuth($accesoBD);
		$permitido = ($instancia->permitido($usuario, $accion) || in_array($metodo, $noauth) || $admin || $publico);
		
		if ($permitido == false)
		{
			$actual = current_url();
			$salida = "/administracion/csa/error/";
			
			if ($actual != $salida)
			{
				$CI->session->set_userdata (SAConstantes::URL_SESION, $actual);
			}
			
			redirect (site_url($salida));
		}
	}
}
?>